import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 * Write a description of class Heroe here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Heroe extends Actor
{

    /**
     * Act - do whatever the Heroe wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public static int Time;
    public static int Time2;
    private int T2;
    public static int Last;
    private int LR;
    private int SR;
    private int P;
    public static String Image = "Still1R.png";
    public int cont = 0;
    private boolean salto;
    private int band=0;
    public int enc=0;
    private int aux=0,aux1=1;
    protected GreenfootImage estadoJud;
    protected int alto;
    protected int ancho;
    protected PlataformaEstatica bar;
    protected GameOver jaja;
    public int muerte = 0;

    /**
     * Constructor de Heroe, Se Obtienen las dimensiones del heroe y se obtine la imagen principal
     */
    public Heroe()
    {
        estadoJud = getImage();
        alto=estadoJud.getHeight();
        ancho=estadoJud.getWidth();
    }
    
    /**
     * Se verifica que no se encuentre a un enemigo o no haya caido, si es correcto el heroe puede moverse y saltar
     */
    public void act() 
    {
        if(encuentroE()==0 && fin()==0)
        {
         salta();
         Move();
        }
    }
    
    /**
     * Metodo para Mover al heroe
     */
    public void Move()
    {
        if(Greenfoot.isKeyDown("a")) { Time2++;            
            SR = 1;
            Last = 2;
            setLocation(getX()-5, getY());
            LR = 1;
            if(Time2 == 10 & T2 == 0) { setImage("leftmove2.png"); 
                Image = "rightmove2.png";
                T2 = 1;
                Time2 = 0;
            }
            if(Time2 == 10 & T2 == 1) { setImage("leftmove3.png"); 
                Image = "rightmove3.png";
                T2 = 0;
                Time2 = 0;
            }
        }
        if(Greenfoot.isKeyDown("d")) { Time2++;            
            SR = 1;
            Last = 1;
            setLocation(getX()+5, getY());
            LR = 1;
            if(Time2 == 10 & T2 == 0) { setImage("rightmove2.png");
                Image = "leftmove2.png";
                T2 = 1;
                Time2 = 0;
            }
            if(Time2 == 10 & T2 == 1) { setImage("rightmove3.png"); 
                Image = "leftmove3.png";
                T2 = 0;
                Time2 = 0;
            }
        }
        if(Greenfoot.isKeyDown("a") == false & Greenfoot.isKeyDown("d") == false) { LR = 0;
        SR = 0; 
        }
        if(LR == 0) { Last = 0; }
    }
    
    /**
     * Metodo para verificar si se encuentra alguna plataforma
     */
    public int encuentra()
    {
        int res=1 ;
        Actor j = getOneIntersectingObject(PlataformaEstatica.class);
        if(j == null)
       {
          res=0;
       }
        return res;
    }
    
    /**
     * Metodo para verificar si se encuentra algun enemigo
     */
    public int encuentroE()
    {
        int res=0 ;
        Actor j = getOneIntersectingObject(Enemigo.class);
        if(j != null)
        {
          getWorld().addObject(jaja = new GameOver(),290,300);//Si se encuentra con el enemigo pierde y muestre en pantalla la imagen de Game Over
          getWorld().addObject(new Enemigo2(),350,55);
          
          getWorld().removeObject(this);
          res=1;
        }
        return res;
    }
    
    /**
     * Metodo para verificar si el heroe pierde por caer 
     */
    public int fin()
    {
        int res=0;
        if(getY() == 799)
        {
          getWorld().addObject(jaja = new GameOver(),290,300);//Imprime la imagen de Game Over
          getWorld().addObject(new Enemigo2(),350,55);
          
          getWorld().removeObject(this);
          res=1;
        }
        return res;
    }
    
    /**
     * Metodo para Saltar del heroe
     */
    public void salta()
    {
       int y=5;
        enc=encuentra();
       
        if(Greenfoot.isKeyDown("space")&&band==1){
          if(cont==1)
           Greenfoot.playSound("nsmb_jump.wav");
          if(cont<40)
          {
           salto=true;
           cont++;
           setLocation(getX(),getY()-y);
          }
          else
           if(cont>=40)
           {
            salto=false;
           }
          enc=0;
        }
        else
         salto=false;
        
        if(enc==1)
        {
         cont=0;
         band=1;
        }
        
        if(enc==0&&salto==false)
        {
          setLocation(getX(),getY()+y);
          band=0;
        }
    }
}
